# -*- coding: utf-8 -*-
from django.db import models
#from django.contrib.auth.models import User
from konto.models import userModel

class Projekt(models.Model):
    """ Projekt """
    nazwa = models.CharField(u"Nazwa projektu", max_length=40, unique=True)
    link = models.SlugField(u"Link", help_text=u"Link do projektu", unique=True)
    opis = models.TextField(u"Opis projektu", max_length=300)
    
    data_utworzenia = models.DateField(u"Data utworzenia", auto_now_add=True)
    data_ukonczenia_planowana = models.DateField(u"Planowana data ukończenia", help_text=u"Format: rrrr-mm-dd", blank=True, null=True)
    data_ukonczenia = models.DateField(u"Data zakończenia", blank=True, null=True)
    
    zalozyciel = models.ForeignKey(userModel, verbose_name=u"Założyciel projektu", related_name="projekt_zalozony")
    admins = models.ManyToManyField(userModel, verbose_name=u"Administratorzy projektu", related_name="projekt_admin")
    czlonkowie = models.ManyToManyField(userModel, verbose_name=u"Członkowie projektu", related_name="projekt_czlonek")
    
    otwarty = models.BooleanField(u"Otwarty", help_text=u"Czy można zgłaszać się do projektu?", default=True)
    
    def stan(self):
	if self.data_ukonczenia:
	    return "zakończony"
	else:
	    return "w realizacji"
    
    class Meta:
	verbose_name = u"Projekt"
	verbose_name_plural = u"Projekty"
	ordering = ['-data_utworzenia']
	
    def __unicode__(self):
        return self.nazwa
    
    def save(self, *args, **kwargs):
	if not self.pk:
	    from django.template.defaultfilters import slugify
	    from django.core.exceptions import ObjectDoesNotExist
	    slug = slugify(self.nazwa)
	    while True:
		try:
		    Projekt.objects.get(link=slug)
		    slug += '_'
		except ObjectDoesNotExist:
		    break
	    self.link = slug
	super(Projekt, self).save()

ZADANIE_STAN_CH = (
    ('n', 'Nie przypisane'),
    ('p', 'Przypisane'),
    ('w', 'W realizacji'),
    ('z', 'Zakończone'),
)
    
class Zadanie(models.Model):
    """ Zadanie projektowe """
    projekt = models.ForeignKey(Projekt, verbose_name=u"Projekt", related_name="zadania")
    
    nazwa = models.CharField(u"Zadanie", max_length=40)
    opis = models.TextField(u"Opis zadania", max_length=300)
    
    wykonawca = models.ForeignKey(userModel, related_name="projekt_zadanie_wykonawca", blank=True, null=True)
    stan = models.CharField(u"Stan", help_text=u"Stan zadania", max_length=1, choices=ZADANIE_STAN_CH, default='n')
    data_utworzenia = models.DateField(u"Data utworzenia", auto_now_add=True)
    data_aktualizacji = models.DateField(u"Data aktulizacji", auto_now=True)
    
    def ostatnia_odp(self):
	if self.zadanie_post.all().count() > 0 :
	    return self.zadanie_post.all()[0]
	else:
	    return None
    
    class Meta:
	verbose_name = u"Zadanie"
	verbose_name_plural = u"Zadania"
	unique_together = ("nazwa", "projekt",)
	ordering = ['-data_utworzenia']
    
    def __unicode__(self):
        return self.nazwa

class ZadaniePost(models.Model):
    """ Post do dyskusji """
    zadanie = models.ForeignKey(Zadanie, verbose_name=u"Zadanie", related_name="zadanie_post")
    
    tresc = models.TextField(u"Treść")
    autor = models.ForeignKey(userModel, related_name="projekt_zadanie_post")
    data_utworzenia = models.DateTimeField(u"Data utworzenia", auto_now_add=True)
    data_aktualizacji = models.DateTimeField(u"Data aktulizacji", auto_now=True)
    
    class Meta:
	verbose_name = u"Komentarz do zadania"
	verbose_name_plural = u"Komentarze do zadań"
	unique_together = ("zadanie", "tresc",)
	ordering = ['-data_utworzenia']
    
    def __unicode__(self):
        return "%s..."%self.tresc[:20]
	
    def is_updated(self):
	dtime = self.data_aktualizacji - self.data_utworzenia
	if dtime.seconds < 180:
	    return False
	else:
	    return True
    
    """
    def save(self):
	last = ZadaniePost.objects.all()[0]
	if self.autor == last.autor:
	    try:
		can = self.antyrec
	    except:
		last.tresc += "<br /><b>Dodane:</b><br />%s"%self.tresc
		last.antyrec = True
		super(ZadaniePost, last).save()
	else:
	    super(ZadaniePost, self).save()
    """

class Wiki(models.Model):
    """ Strona do wikipedii w projekcie """
    projekt = models.ForeignKey(Projekt, verbose_name=u"Projekt", related_name="wiki")
    
    tytul = models.CharField(u"Tutył", max_length=40)
    skrot = models.TextField(u"Skrót artykułu", max_length=300)
    tresc = models.TextField(u"Treść artykułu")
    
    autor = models.ForeignKey(userModel, related_name="projekt_wiki_autor")
    autor_edit = models.ForeignKey(userModel, related_name="projekt_wiki_edytor", blank=True, null=True)
    data_utworzenia = models.DateField(u"Data utworzenia", auto_now_add=True)
    data_aktualizacji = models.DateField(u"Data aktulizacji", auto_now=True)
    
    class Meta:
	verbose_name = u"Artykuł"
	verbose_name_plural = u"Artykuły"
	unique_together = ("tytul", "projekt",)
	ordering = ['-data_utworzenia']
    
    def __unicode__(self):
        return self.tytul

class DyskusjaTemat(models.Model):
    """ Temat Dyskusji """
    projekt = models.ForeignKey(Projekt, verbose_name=u"Projekt", related_name="dyskusja_temat")
    
    temat = models.CharField(u"Temat", help_text=u"Temat dyskusjii", max_length=200)
    tresc = models.TextField(u"Treść")
    autor = models.ForeignKey(userModel, related_name="projekt_dyskusja_temat")
    data_utworzenia = models.DateTimeField(u"Data utworzenia", auto_now_add=True)
    data_aktualizacji = models.DateTimeField(u"Data aktulizacji", auto_now=True)
    
    def ostatnia_odp(self):
	if self.dyskusja_post.all().count() > 0 :
	    return self.dyskusja_post.all()[0]
	else:
	    return None
    
    class Meta:
	verbose_name = u"Temat Dyskusji"
	verbose_name_plural = u"Tematy Dyskusji"
	unique_together = ("temat", "projekt",)
	ordering = ['-data_utworzenia']
    
    def __unicode__(self):
        return self.temat

class DyskusjaPost(models.Model):
    """ Post do dyskusji """
    temat = models.ForeignKey(DyskusjaTemat, verbose_name=u"Temat", related_name="dyskusja_post")
    
    tresc = models.TextField(u"Treść")
    autor = models.ForeignKey(userModel, related_name="projekt_dyskusja_post")
    data_utworzenia = models.DateTimeField(u"Data utworzenia", auto_now_add=True)
    data_aktualizacji = models.DateTimeField(u"Data aktulizacji", auto_now=True)
    
    class Meta:
	verbose_name = u"Post w Dyskusji"
	verbose_name_plural = u"Posty w Dyskusjach"
	unique_together = ("temat", "tresc",)
	ordering = ['data_utworzenia']
    
    def __unicode__(self):
        return "%s..."%self.tresc[:20]

	def temat2(self):
		return "Odp: %s"%self.temat
    
    def is_updated(self):
		dtime = self.data_aktualizacji - self.data_utworzenia
		if dtime.seconds < 180:
			return False
		else:
			return True